package pos.Junit;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import pos.dominio.Carta;
import pos.dominio.IU;
import pos.dominio.MazoCentral;
import pos.dominio.MazoGestor;
import pos.dominio.MazosFactory;
import pos.dominio.PartidaFacade;
import pos.dominio.Tablero;
import pos.dominio.Tendencia;
import junit.framework.TestCase;

public class TestTablero extends TestCase 
{
	private MazoGestor<Carta> mazoPrinOlf;
	private MazoGestor<Carta> mazoTend;
	private MazoGestor<Carta> mazoNoble;
	private List<MazoCentral<Carta>> mazosCentrales;
	private MazoGestor<Carta> mazoEncarte;
	private MazoGestor<Carta> mazoDescarte;
	private MazosFactory factoryMazo;
	private PartidaFacade partida;
	private IU interfaz;
	private Tablero tablero;

	
	protected void setUp() throws Exception 
	{
		partida = new PartidaFacade();
		
		tablero = new Tablero(partida);
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}

	public TestTablero() 
	{
		PartidaFacade p = new PartidaFacade();
		
		assertTrue(new Tablero(p) instanceof Tablero);
	}

	public void testGetMazoPrinOlf() 
	{
		assertEquals(mazoPrinOlf, tablero.getMazoPrinOlf());
	}

	public void testSetMazoPrinOlf() 
	{
		MazoGestor<Carta> mazoPO = new MazoGestor<Carta>();
		
		tablero.setMazoPrinOlf(mazoPO);
		
		assertEquals(mazoPO, mazoPrinOlf);
	}

	public void testGetMazoTend() 
	{
		assertEquals(mazoTend, tablero.getMazoTend());
	}

	public void testSetMazoTend() 
	{
		MazoGestor<Carta> mazoT = new MazoGestor<Carta>();
		
		tablero.setMazoTend(mazoT);
		
		assertEquals(mazoT, mazoTend);
	}

	public void testGetMazoNoble() 
	{
		assertEquals(mazoNoble, tablero.getMazoNoble());
	}

	public void testSetMazoNoble() 
	{
		MazoGestor<Carta> mazoN = new MazoGestor<Carta>();
		
		tablero.setMazoTend(mazoN);
		
		assertEquals(mazoN, mazoNoble);
	}

	public void testGetMazosCentrales() 
	{
		assertEquals(mazosCentrales, tablero.getMazosCentrales());
	}

	public void testSetMazosCentrales() 
	{
		List<MazoCentral<Carta>> lista = new ArrayList<MazoCentral<Carta>>();
		
		tablero.setMazosCentrales(lista);
		
		assertEquals(lista, tablero.getMazosCentrales());
	}

	public void testGetMazoEncarte() 
	{
		assertEquals(mazoEncarte, tablero.getMazoEncarte());
	}

	public void testSetMazoEncarte() 
	{
		MazoGestor<Carta> mazoE = new MazoGestor<Carta>();
		
		tablero.setMazoEncarte(mazoE);
		
		assertEquals(mazoE, tablero.getMazoEncarte());
	}

	public void testGetMazoDescarte() 
	{
		assertEquals(mazoDescarte, tablero.getMazoDescarte());
	}

	public void testSetMazoDescarte() 
	{
		MazoGestor<Carta> mazoD	 = new MazoGestor<Carta>();
		
		tablero.setMazoDescarte(mazoD);
		
		assertEquals(mazoD, tablero.getMazoDescarte());
	}

	public void testGetMazoFactory() 
	{
		assertEquals(factoryMazo, tablero.getMazoFactory());
	}

	public void testGetPartida() 
	{
		assertEquals(partida, tablero.getPartida());
	}

	public void testSetPartida() 
	{
		PartidaFacade p = new PartidaFacade();
		
		tablero.setPartida(p);
		
		assertEquals(p, tablero.getPartida());
	}

	public void testGetInterfazUsuario() 
	{
		assertEquals(interfaz, tablero.getInterfazUsuario());
	}

	public void testSetInterfazUsuario() 
	{
		IU interfazU = new IU();
		
		tablero.setInterfazUsuario(interfazU);
		
		assertEquals(interfazU, tablero.getInterfazUsuario());
	}

	public void testCrearTablero() 
	{
		tablero.crearTablero();
		
		assertNotNull(mazoEncarte);
		assertNotNull(mazoNoble);
		assertNotNull(mazoPrinOlf);
		assertNotNull(mazosCentrales);
		assertNotNull(mazoTend);
	}

	
	public void testRepartirCartas() 
	{
		//incompleto//
	}

	public void testElegirMcSinNoble() 
	{
		assertTrue(tablero.elegirMcSinNoble() instanceof MazoCentral<?>);
	}

	public void testElegirMcConNoble() 
	{
		assertTrue(tablero.elegirMcConNoble() instanceof MazoCentral<?>);
	}

	public void testElegirMcSinReserva() 
	{
		assertTrue(tablero.elegirMcSinReserva() instanceof MazoCentral<?>);
	}

	public void testElegirMcConReserva() 
	{
		assertTrue(tablero.elegirMcConReserva() instanceof MazoCentral<?>);
	}

	public void testGetMapTendSinNoble() 
	{
		assertTrue(tablero.getMapTendSinNoble() instanceof Map<?, ?>);
	}

	public void testGetMapTendConNoble() 
	{
		assertTrue(tablero.getMapTendConNoble() instanceof Map<?, ?>);
	}

	public void testGetMapTendSinReserva() 
	{
		assertTrue(tablero.getMapTendSinReserva() instanceof Map<?, ?>);
	}

	public void testGetMapTendConReserva() 
	{
		assertTrue(tablero.getMapTendConReserva() instanceof Map<?, ?>);
	}

}
